<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 传统的对象 JavaScript 的对象（Object），本质上是键值对的集合（Hash 结构），但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。   (如果键名存储其他类型 会隐式转化为字符串)
    var obj = {
        "a":1,
        "b":2
    }
    obj["c"] = 3;
    obj[100] = 3;
    obj[true] = 3;

    var arr = [1,2,3];
    obj[arr] = arr;

    var o = {demo:"test"};
    obj[o] = o;

    console.log(obj);

    for(var key in obj){
        console.log(key);
    }

    // 为了解决这个问题，ES6 提供了 Map 数据结构。它类似于对象，也是键值对的集合，但是“键”的范围不限于字符串，各种类型的值（包括对象）都可以当作键。也就是说，Object 结构提供了“字符串—值”的对应，Map 结构提供了“值—值”的对应，是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构，Map 比 Object 更合适。
    
    // 如何创建Map 结构;   => 通过构造函数 Map创建
    // var m = new Map();
    // console.log(m);


    // Map结构相关的属性和方法

    // 属性
    // size   Map 结构的成员总数。 (存放数据的数量)

    // 方法:
    // set(key,val)   对应键名设置键值 (键名和键值都可以是任意类型   没有就设置,有就修改),然后返回整个 Map 结构
    // get(key)       对应键名获取键值
    // delete(key)    对应键名删除键值对(单删)  删除成功返回true,失败返回false
    // clear()        清空Map结构
    // has(key)       判断Map结构中是否存在对应的键名
        
    var m = new Map();

    // 设置
    // var result = m.set(100,100);   // 返回整个 Map 结构
    // console.log(result,m,result===m);

    var arr = [1,2,3];
    var o = {demo:"test"};
    
    m.set(100,100).set("hello","world").set(true,false).set(null,undefined).set(arr,arr).set(o,o);

    m.set(100,200)


    // 获取
    // console.log(m.get(100));
    // console.log(m.get("hello"));
    // console.log(m.get(true));
    // console.log(m.get(null));
    // console.log(m.get(arr));
    // console.log(m.get(o));

    // 删除(单)
    // console.log(m.delete(100));
    // console.log(m.delete("hello"));
    // console.log(m.delete(true));
    // console.log(m.delete(null));
    // console.log(m.delete(arr));
    // console.log(m.delete(o));
    
    // 清除(全删)
    // console.log(m.clear());

    // has(key)  是否存在
    console.log(m.has(100));
    console.log(m.has("hello"));
    console.log(m.has(true));
    console.log(m.has(null));
    console.log(m.has(arr));
    console.log(m.has(o));

    console.log(m.has([1,2,3])); // false
    
    console.log(m);
</script>
</html>